package com.crk.yiyuanguahao.service;

import com.crk.yiyuanguahao.entity.Function;
import com.crk.yiyuanguahao.entity.ResAuth;
import com.crk.yiyuanguahao.entity.menu.SysFunctionMenuDto;
import com.crk.yiyuanguahao.entity.menu.SysFunctionTreeDto;
import com.crk.yiyuanguahao.util.ResponseResult;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

/**
 * @Author: 程荣凯
 * @Date: 2019/3/21 17:38
 */
@Service
public interface ResAuthService {
    /**
     * 添加功能权限
     * @param resAuth 功能权限
     * @return
     */
    public ResponseResult addResAuth(ResAuth resAuth);

    /**
     * 批量添加功能权限
     * @param roleId 角色ID
     * @param res 资源列表
     * @return
     */
    public ResponseResult batchAddResAuth(int roleId, List<HashMap<String, Integer>> res);
    /**
     * 修改功能权限
     * @param resAuth 功能权限
     * @return
     */
    public ResponseResult updateResAuth(ResAuth resAuth);

    /**
     * 批量修改功能权限
     * @param roleId 角色ID
     * @param res 资源列表
     * @return
     */
    public ResponseResult batchUpdateResAuth(int roleId, List<HashMap<String, Integer>> res);
    /**
     * 删除功能权限
     * @param resAuthId 功能权限
     * @return
     */
    public ResponseResult deleteResAuth(int resAuthId);

    /**
     * 查询功能权限列表
     * @param userId 用户ID
     * @return
     */
    public ResponseResult queryResAuthList(int userId);

    /**
     * 查询功能列表
     * @param roleId 角色ID
     * @return
     */
    public ResponseResult queryResListTreeByRole(int roleId, int functionId, int type);

    /**
     * 查询子功能树
     * @param functionList 功能列表
     * @param resAuths 权限列表
     * @param functionId 功能列表
     * @param type 功能类型
     * @return
     */
    public List<SysFunctionTreeDto> getChildrenTree(List<SysFunctionTreeDto> functionList, List<ResAuth> resAuths
            , int functionId, int type);

    /**
     * 查询子功能
     * @param pId 父功能id
     * @param type 功能类型
     * @return
     */
    public List<SysFunctionMenuDto> queryMenuListByPid(List<SysFunctionMenuDto> functionList, HashSet<Integer> resAuths, int pId, int type);

    /**
     * 查询子菜单（不查询子集）
     * @param pId 父id
     * @param type 类型
     * @return
     */
    public List<Function> selectByParentId(int pId, int type);
    /**
     * 查询子菜单（不查询子集）
     * @param pId 父id
     * @param type 类型
     * @return
     */
    public List<Function> selectByParentIdPlus(int pId, int type, int currentUserId);

    /**
     * 查询菜单
     * @param userId
     * @param type
     * @return
     */
    public ResponseResult getFunctionByUser(int userId, int type, int currentId);

    /**
     * 查询菜单
     * @param userId
     * @param type
     * @return
     */
    public ResponseResult getFunctionTreeByUser(int userId, int type, int currentId);

    public ResponseResult getFunctionTreeByRole(int roleId, int type, Integer currentId);

    /**
     * 查询数据权限规则
     * @param userId 用户id
     * @param module 所属模块
     * @return
     */
    public ResponseResult getDataAuthRule(int userId, int module);


}
